package com.bird.设计模式.创建型.单例模式.饿汉单例;

import java.io.Serializable;

/**
 * @data 2022/2/24 19:53
 * @author: bird
 * @description: 饿汉式单例：
 * 顾名思义：就是在类的加载的时候创建类的实例
 */
public class HungrySingleton implements Serializable {

    // 这个类的实例在类加载的时候就创建的
    // 声明final 的变量必须在类的加载的时候就完成赋值
    private final static HungrySingleton hungrySingleton = new HungrySingleton();

    //私有的构造函数 防止外部创建
    private HungrySingleton() {
        // 加上这个判断的目的是 防止通过反射 破坏单例对象。
        if(hungrySingleton!=null){
            throw  new RuntimeException("单例构造器禁止反射调用");
        }
    }


    public static HungrySingleton getInstance() {
        return hungrySingleton;
    }


    //定义这个方法 可以保证序列化破获单例模式
    private Object readResolve() {
        return hungrySingleton;
    }


}

/*
 * 饿汉和懒汉的区别是:
 * 2  1: 它们之间最大的区别是 是否是延迟加载
 *  是在加载的时候初始化 还是在调用之后初始化
 *
 *
 * */